{ "cells": [ { "cell_type": "markdown", "id": "c04e3ac9", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Differential equation resolution\n", "\n", "## Introduction\n", "\n", "We present here a Perceval implementation of a Quantum Machine Learning algorithm for solving differential equations. Its aims is to approximate the solution to the differential equation considered in \\[1\\]:\n", "\n", "$$\n", "\\frac{d f}{d x}+\\lambda f(x)(\\kappa+\\tan (\\lambda x))=0\n", "$$\n", "\n", "with boundary condition $f(0)=f_{0}$. The analytical solution is $f(x)=\\exp (-\\kappa \\lambda x) \\cos (\\lambda x)+ f_0 - 1$.\n", "\n", "### QML Loss Function Definition\n", "\n", "In order to use QML to solve this differential equation, we first need to derive from it a loss function whose minimum is associated to its analytical solution.\n", "\n", "Let $F\\left[\\left\\{d^{m} f / d x^{m}\\right\\}_{m},f, x\\right]=0$ be a general differential equation verified by $f(x)$, where $F[.]$ is an operator acting on $f(x)$, its derivatives and $x$. For the solving of a differential equation, the loss function described in \\[1\\] consists of two terms\n", "\n", "$$\n", " \\mathcal{L}_{\\boldsymbol{\\theta}}\\left[\\left\\{d^{m} g / d x^{m}\\right\\}_{m},g, x\\right]:=\\mathcal{L}_{\\boldsymbol{\\theta}}^{(\\mathrm{diff})}\\left[\\left\\{d^{m} g / d x^{m}\\right\\}_{m},g, x\\right]+\\mathcal{L}_{\\boldsymbol{\\theta}}^{(\\text {boundary})}[g, x].\n", "$$\n", "\n", "The first term $\\mathcal{L}_{\\boldsymbol{\\theta}}^{(\\mathrm{diff})}$ corresponds to the differential equation which has been discretised over a fixed regular grid of $M$ points noted $x_i$:\n", "\n", "$$\n", " \\mathcal{L}_{\\boldsymbol{\\theta}}^{(\\mathrm{diff})}\\left[\\left\\{d^{m} g / d x^{m}\\right\\}_{m},g, x\\right]:=\\frac{1}{M} \\sum_{i=1}^{M} L\\left(F\\left[d_{x}^m g\\left(x_{i}\\right), g\\left(x_{i}\\right), x_{i}\\right], 0\\right),\n", "$$\n", "\n", "where $L(a,b) := (a - b)^2$ is the squared distance between two arguments. The second term $\\mathcal{L}_{\\boldsymbol{\\theta}}^{(\\text {boundary })}$ is associated to the initial conditions of our desired solution. It is defined as: \n", "\n", "$$\n", " \\mathcal{L}_{\\boldsymbol{\\theta}}^{\\text {(boundary) }}[g, x]:=\\eta L\\left(g(x_0), f_{0}\\right),\n", "$$\n", " \n", "where $\\eta$ is the weight granted to the boundary condition and $f_{0}$ is given by $f(x_0) = f_0$. \n", "\n", "Given a function approximator $f^{(n)}(x, \\boldsymbol{\\theta}, \\boldsymbol{\\lambda})$, the loss function above will be minimised using a classical algorithm, updating the parameters $\\boldsymbol{\\theta}$ based on samples obtained using a quantum device.\n", "\n", "### Quantum circuit architecture\n", "\n", "The feature map used is presented in \\[2,3,4\\]. The quantum circuit architecture from \\[4\\] is expressed as $\\mathcal{U}(x, \\boldsymbol{\\theta}):=\\mathcal{W}^{(2)}\\left(\\boldsymbol{\\theta}_{2}\\right) \\mathcal{S}(x) \\mathcal{W}^{(1)}\\left(\\boldsymbol{\\theta}_{1}\\right).$ The phase-shift operator $\\mathcal{S}(x)$ incorporates the $x$ dependency of the function we wish to approximate. It is sandwiched between two universal interferometers $\\mathcal{W}^{(1)}(\\boldsymbol{\\theta_1})$ and $\\mathcal{W}^{(2)}(\\boldsymbol{\\theta_2})$, where the beam-splitter parameters $\\boldsymbol{\\theta_1}$ and $\\boldsymbol{\\theta_2}$ of this mesh architecture are tunable to enable training of the circuit.\n", "The output measurement operator, noted $\\mathcal{M}(\\boldsymbol{\\lambda})$, is the projection on the Fock states obtained using photon-number resolving detectors, multiplied by some coefficients $\\boldsymbol{\\lambda}$ which can also be tunable. Formally, we have:\n", "\n", "$$ \\mathcal{M}(\\boldsymbol{\\lambda}) = \\sum_{\\mathbf{\\left | n^{(f)}\\right \\rangle}}\\lambda_{\\mathbf{\\left | n^{(f)}\\right \\rangle}}\\mathbf{\\left | n^{(f)}\\right \\rangle}\\mathbf{\\left \\langle n^{(f)}\\right |},\n", "$$\n", "\n", "where the sum is taken over all $\\binom{n+m-1}{n}$ possible Fock states considering $n$ photons in $m$ modes. Let $\\mathbf{\\left | n^{(i)}\\right \\rangle} = \\left |n^{(i)}_1,n^{(i)}_2,\\dots,n^{(i)}_m\\right \\rangle$ be the input state consisting of $n$ photons where $n^{(i)}_j$ is the number of photons in input mode $j$. Given these elements, the circuit's output $f^{(n)}(x, \\boldsymbol{\\theta}, \\boldsymbol{\\lambda})$ is given by the following expectation value:\n", "\n", "$$\n", "f^{(n)}(x, \\boldsymbol{\\theta}, \\boldsymbol{\\lambda})=\\left\\langle\\mathbf{n}^{(i)}\\left|\\mathcal{U}^{\\dagger}(x, \\boldsymbol{\\theta}) \\mathcal{M}(\\boldsymbol{\\lambda}) \\mathcal{U}(x, \\boldsymbol{\\theta})\\right| \\mathbf{n}^{(i)}\\right\\rangle.\n", "$$\n", "\n", "This expression can be rewritten as the following Fourier series \\[4\\]\n", "\n", "$$\n", "f^{(n)}(x, \\boldsymbol{\\theta}, \\boldsymbol{\\lambda})=\\sum_{\\omega \\in \\Omega_{n}} c_{\\omega}(\\boldsymbol{\\theta}, \\boldsymbol{\\lambda}) e^{i \\omega x},\n", "$$\n", "\n", "where $\\Omega_n = \\{-n, -n+1, \\dots, n-1, n \\}$ is the frequency spectrum one can reach with $n$ incoming photons and $\\{c_\\omega(\\boldsymbol{\\theta}, \\boldsymbol{\\lambda})\\}$ are the Fourier coefficients. The $\\boldsymbol{\\lambda}$ parameters are sampled randomly in the interval $[-a;a]$, with $a$ a randomly chosen integer. $f^{(n)}(x, \\boldsymbol{\\theta}, \\boldsymbol{\\lambda})$ will serve as a function approximator for this chosen differential equation. Differentiation in the loss function is discretised as $\\frac{df}{dx} \\simeq \\frac{f(x+\\Delta x) - f(x-\\Delta x)}{2\\Delta x}$.\n", "\n", "$n, m,$ and $\\boldsymbol{\\lambda}$ are variable parameters defined below. $\\Delta x$ is the mesh size." ] }, { "cell_type": "markdown", "id": "e9df16c8", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Perceval Simulation\n", "\n", "### Initialisation" ] }, { "cell_type": "code", "execution_count": 18, "id": "7918962c", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import perceval as pcvl\n", "import perceval.lib.phys as phys\n", "import numpy as np\n", "from math import comb\n", "from scipy.optimize import minimize\n", "import time\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "import tqdm as tqdm" ] }, { "cell_type": "markdown", "id": "04323b71", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We will run this notebook with 6 photons" ] }, { "cell_type": "code", "execution_count": 2, "id": "f59b62f8", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "nphotons = 6" ] }, { "cell_type": "markdown", "id": "bd3c3eaf", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Differential equation parameters\n", "\n", "We define here the value of the differential equation parameters and boundary condition $\\lambda, \\kappa, f_0$." ] }, { "cell_type": "code", "execution_count": 3, "id": "debd15cc", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Differential equation parameters\n", "lambd = 8\n", "kappa = 0.1\n", "\n", "def F(u_prime, u, x): # DE, works with numpy arrays\n", " return u_prime + lambd * u * (kappa + np.tan(lambd * x))" ] }, { "cell_type": "code", "execution_count": 4, "id": "4c18efbf", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Boundary condition (f(x_0)=f_0)\n", "x_0 = 0\n", "f_0 = 1" ] }, { "cell_type": "code", "execution_count": 5, "id": "ac67fd52", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Modeling parameters\n", "n_grid = 50 # number of grid points of the discretized differential equation\n", "range_min = 0 # minimum of the interval on which we wish to approximate our function\n", "range_max = 1 # maximum of the interval on which we wish to approximate our function\n", "X = np.linspace(range_min, range_max-range_min, n_grid) # Optimisation grid" ] }, { "cell_type": "code", "execution_count": 6, "id": "45a02405", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Differential equation's exact solution - for comparison\n", "def u(x):\n", " return np.exp(- kappa*lambd*x)*np.cos(lambd*x)" ] }, { "cell_type": "code", "execution_count": 7, "id": "9c8830ee", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Parameters of the quantum machine learning procedure\n", "N = nphotons # Number of photons\n", "m = nphotons # Number of modes\n", "eta = 5 # weight granted to the initial condition\n", "a = 200 # Approximate boundaries of the interval that the image of the trial function can cover\n", "fock_dim = comb(N + m - 1, N)\n", "# lambda coefficients for all the possible outputs\n", "lambda_random = 2 * a * np.random.rand(fock_dim) - a\n", "# dx serves for the numerical differentiation of f\n", "dx = (range_max-range_min) / n_grid" ] }, { "cell_type": "code", "execution_count": 8, "id": "355b87c8", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "|1,1,1,1,1,1>\n" ] } ], "source": [ "# Input state with N photons and m modes\n", "input_state = pcvl.BasicState([1]*N+[0]*(m-N))\n", "print(input_state)" ] }, { "cell_type": "markdown", "id": "58385605", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Definition of the circuit\n", "\n", "We will generate a Haar-random initial unitary using QR decomposition built in Perceval `Matrix.random_unitary`, the circuit is defined by the combination of 3 sub-circuits - the intermediate phase is a parameter." ] }, { "cell_type": "code", "execution_count": 9, "id": "5dd4d6c3", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n0\n\n1\n\n2\n\n3\n\n4\n\n5\n\n\n\n\n\n\n\nW1\n\n\nΦ=px\n\n\n\n\n\n\n\n\n\n\n\n\nW2\n\n0\n\n1\n\n2\n\n3\n\n4\n\n5" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": "True" }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"Haar unitary parameters\"\n", "# number of parameters used for the two universal interferometers (2*m**2 per interferometer)\n", "parameters = np.random.normal(size=4*m**2)\n", "\n", "simulator_backend = pcvl.BackendFactory().get_backend(\"SLOS\")\n", "\n", "px = pcvl.P(\"px\")\n", "c = phys.Unitary(pcvl.Matrix.random_unitary(m, parameters[:2 * m ** 2]), name=\"W1\")\\\n", " // (0, phys.PS(px))\\\n", " // phys.Unitary(pcvl.Matrix.random_unitary(m, parameters[2 * m ** 2:]), name=\"W2\")\n", "pcvl.pdisplay(c)\n", "s1 = simulator_backend(pcvl.Matrix.random_unitary(m))\n", "s1.compile(input_state)\n" ] }, { "cell_type": "markdown", "id": "5d9333b0", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Expectation value and loss function computation\n", "\n", "The expectation value of the measurement operator $\\mathcal{M}(\\boldsymbol{\\lambda})$ is obtained directly from Fock state probabilities computed by Perceval. Given this expectation value, the code snippet below computes the loss function defined in the Introduction.\n", "\n", "Note the use of the `all_prob` simulator method giving directly access to the probabilities of all possible output states. This calculation is optimized in SLOS backend." ] }, { "cell_type": "code", "execution_count": 10, "id": "597cce98", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def computation(params):\n", " global current_loss\n", " global computation_count\n", " \"compute the loss function of a given differential equation in order for it to be optimized\"\n", " computation_count += 1\n", " f_theta_0 = 0 # boundary condition\n", " coefs = lambda_random # coefficients of the M observable\n", " # initial condition with the two universal interferometers and the phase shift in the middle\n", " U_1 = pcvl.Matrix.random_unitary(m, params[:2 * m ** 2])\n", " U_2 = pcvl.Matrix.random_unitary(m, params[2 * m ** 2:])\n", "\n", " px = pcvl.P(\"x\")\n", " c = phys.Unitary(U_2) // (0, phys.PS(px)) // phys.Unitary(U_1)\n", "\n", " px.set_value(x_0)\n", " U = c.compute_unitary(use_symbolic=False)\n", " s1.U = U\n", " f_theta_0 = np.sum(np.multiply(s1.all_prob(input_state), coefs))\n", "\n", " # boundary condition given a weight eta\n", " loss = eta * (f_theta_0 - f_0) ** 2 * len(X)\n", "\n", " # Y[0] is before the domain we are interested in (used for differentiation), x_0 is at Y[1]\n", " Y = np.zeros(n_grid + 2)\n", "\n", " # x_0 is at the beginning of the domain, already calculated\n", " Y[1] = f_theta_0\n", "\n", " px.set_value(range_min - dx)\n", " s1.U = c.compute_unitary(use_symbolic=False)\n", " Y[0] = np.sum(np.multiply(s1.all_prob(input_state), coefs))\n", "\n", "\n", " for i in range(1, n_grid):\n", " x = X[i]\n", " px.set_value(x)\n", " s1.U = c.compute_unitary(use_symbolic=False)\n", " Y[i + 1] = np.sum(np.multiply(s1.all_prob(input_state), coefs))\n", "\n", " px.set_value(range_max + dx)\n", " s1.U = c.compute_unitary(use_symbolic=False)\n", " Y[n_grid + 1] = np.sum(np.multiply(s1.all_prob(input_state), coefs))\n", "\n", " # Differentiation\n", " Y_prime = (Y[2:] - Y[:-2])/(2*dx)\n", "\n", " loss += np.sum((F(Y_prime, Y[1:-1], X))**2)\n", "\n", " current_loss = loss / len(X)\n", " return current_loss" ] }, { "cell_type": "markdown", "id": "8acf5506", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Classical optimisation\n", "\n", "Finally the code below performs the optimisation procedure using the loss function defined in the previous section. To this end, we use a Broyden–Fletcher–Goldfarb–Shanno (BFGS) optimiser \\[5\\] from the SciPy library." ] }, { "cell_type": "code", "execution_count": 11, "id": "281dbb29", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def callbackF(parameters):\n", " \"\"\"callback function called by scipy.optimize.minimize allowing to monitor progress\"\"\"\n", " global current_loss\n", " global computation_count\n", " global loss_evolution\n", " global start_time\n", " now = time.time()\n", " pbar.set_description(\"M= %d Loss: %0.5f #computations: %d elapsed: %0.5f\" % \n", " (m, current_loss, computation_count, now-start_time))\n", " pbar.update(1)\n", " loss_evolution.append((current_loss, now-start_time))\n", " computation_count = 0\n", " start_time = now" ] }, { "cell_type": "code", "execution_count": 12, "id": "465db5d2", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "M= 6 Loss: 0.01929 #computations: 435 elapsed: 3.72517: : 264it [07:16, 3.46s/it] " ] } ], "source": [ "computation_count = 0\n", "current_loss = 0\n", "start_time = time.time()\n", "loss_evolution = []\n", "\n", "pbar = tqdm.tqdm()\n", "res = minimize(computation, parameters, callback=callbackF, method='BFGS', options={'gtol': 1E-2})" ] }, { "cell_type": "markdown", "id": "1be681a8", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "After the optimisation procedure has been completed, the optimal unitary parameters (in `res.x`) can be used to determine the quantum circuit beam-splitter and phase-shifter angles for an experimental realisation." ] }, { "cell_type": "code", "execution_count": 13, "id": "21726b0c", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unitary parameters [ 0.53891548 0.21569128 -0.22353646 0.28563813 -0.29147866 0.43921577\n", " -1.42398067 0.89122694 1.7983834 0.60008989 -1.65376412 -0.38094132\n", " 0.29041105 -0.21317347 1.45050872 1.46926834 -1.25998162 -1.56496857\n", " 0.86145319 -1.41503119 2.13940914 -1.87598386 -1.21801322 0.30972512\n", " -0.27351561 -0.4282766 -1.00645191 1.73981227 0.74053531 -0.42923668\n", " 0.54527143 -1.01678203 0.71667792 -0.59972183 -2.90448644 1.50140223\n", " 2.64934115 -0.05122437 -0.35208727 -2.24785128 -0.3136343 0.85498015\n", " -0.78692954 0.20216458 -0.05461981 -0.39944246 2.30232439 -1.66634158\n", " -0.76181137 0.45161744 -0.13022815 2.37213915 2.59868001 -0.60661216\n", " 2.47405142 0.07558246 -0.22223953 -1.60395241 -1.62073662 2.78193488\n", " 0.8807037 1.79411624 -0.28278379 1.40664947 -2.2676453 3.28390565\n", " 1.70265253 -0.7578531 -0.86833146 0.49135553 -1.71873575 0.24549672\n", " -0.49010474 -0.22684666 0.53083833 -0.48257756 1.07001376 1.69976603\n", " -0.27101161 1.60044371 -0.97041346 -0.89852207 -1.22383548 -0.98609283\n", " -0.34705425 -1.24259372 -0.6082258 -0.60734625 -1.92371456 0.71529154\n", " -0.60812648 0.86638546 -0.13906038 -1.92310185 -1.19006334 -0.10496104\n", " 0.75299518 0.44190065 -1.21985268 -2.00148534 -3.96393817 1.7585545\n", " -0.50994779 0.32836584 0.01673392 1.14178273 1.30651786 2.11460988\n", " -1.104944 1.39375128 -0.5343951 -1.67729652 -1.29758049 -0.77721965\n", " 0.09478565 -0.35168055 0.35954347 -1.62900678 -1.74163867 0.10919559\n", " 1.62430792 -1.31252367 1.37714924 0.28078232 0.01823145 -1.02650567\n", " -1.4851842 -0.33864834 -0.08074981 -1.08737797 -0.6167941 0.00810604\n", " 0.34166759 -0.76807854 1.30148629 0.62279576 -0.55109847 -1.40018476\n", " -1.29953122 -0.24036318 -1.84388996 -1.76089538 -1.31287697 -1.20853267]\n" ] } ], "source": [ "print(\"Unitary parameters\", res.x)" ] }, { "cell_type": "markdown", "id": "3b6c5da8", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Plotting the approximation\n", "\n", "We now plot the result of our optimisation in order to compare the QML algorithm's output and the analytical solution." ] }, { "cell_type": "code", "execution_count": 14, "id": "6bede765", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def plot_solution(m, N, X, optim_params, lambda_random):\n", " Y = []\n", " U_1 = pcvl.Matrix.random_unitary(m, optim_params[:2 * m ** 2])\n", " U_2 = pcvl.Matrix.random_unitary(m, optim_params[2 * m ** 2:])\n", " simulator_backend = pcvl.BackendFactory().get_backend(\"SLOS\")\n", " px = pcvl.P(\"x\")\n", " c = phys.Unitary(U_2) // (0, phys.PS(px)) // phys.Unitary(U_1)\n", "\n", " for x in X:\n", " px.set_value(x)\n", " U = c.compute_unitary(use_symbolic=False)\n", " s1.U = U\n", " f_theta = np.sum(np.multiply(s1.all_prob(input_state), lambda_random))\n", " Y.append(f_theta)\n", " exact = u(X)\n", " plt.plot(X, Y, label=\"Approximation with {} photons\".format(N))" ] }, { "cell_type": "code", "execution_count": 19, "id": "b997c635", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAv4AAAIpCAYAAADaXjwuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAACJ5UlEQVR4nOzdd3gU1cPF8e9NDwk1hBZ676GEXgQERJGOAtKLyE9EQUWxI6KCooAiIr0jVUAUkN6khd57C72Fnj7vHxt5QekkmWxyPs+Th2RmdvcEBc7e3LnXWJaFiIiIiIgkbS52BxARERERkfin4i8iIiIikgyo+IuIiIiIJAMq/iIiIiIiyYCKv4iIiIhIMqDiLyIiIiKSDLjZHeBJpE+f3sqZM6fdMUREREREEpVNmzZdsCzL/17nnLL458yZk+DgYLtjiIiIiIgkKsaYY/c7p6k+IiIiIiLJgIq/iIiIiEgyoOIvIiIiIpIMOOUcfxEREZEHiYyMJCQkhLCwMLujiMQLLy8vsmbNiru7+yM/RsVfREREkpyQkBBSpkxJzpw5McbYHUckTlmWxcWLFwkJCSFXrlyP/DhN9REREZEkJywsDD8/P5V+SZKMMfj5+T32T7RU/EVERCRJUumXpOxJ/v9W8RcRERGJJ7Nnz8YYw969e23LcOrUKZo2bRonzzV79mx27959++tPP/2UxYsXx8lzP8id38PWrVv5888/b5/r3bs3AwYMeOhzRERE0LlzZ/Lnz0/BggWZOXPmI7/+8uXLefHFFx8r86BBg7h58+ZjPSa+qfiLiIiIxJMpU6ZQuXJlpkyZEmfPGRUV9VjXZ8mShRkzZsTJa/+7+Pfp04eaNWvGyXM/yJ3fw7+L/6P68ssvyZAhA/v372f37t0888wzcR3zLir+IiIiIsnE9evXWb16NaNGjeLXX3+9fXz58uVUrVqVunXrUqBAAbp06UJMTAwAvr6+9OjRgyJFivDss89y/vx5AKpVq0b37t0JCgpi8ODBLFmyhJIlS1KsWDE6dOhAeHg4GzdupHjx4oSFhXHjxg2KFCnCzp07OXr0KEWLFgVg7NixNGzYkFq1apEzZ06GDBnC999/T8mSJSlfvjyXLl0CYMSIEZQpU4bAwECaNGnCzZs3+fvvv5k7dy49e/akRIkSHDp0iHbt2t0u5PfKBJAzZ04+++wzSpUqRbFixe7504+6deuyfft2AEqWLEmfPn0Ax08URowYcft7iIiI4NNPP2Xq1KmUKFGCqVOnArB7926qVatG7ty5+eGHH+7532P06NF88MEHALi4uJA+ffr/XNO7d29at25NhQoVyJcvHyNGjLjrv2fTpk0pWLAgLVu2xLKs+37fP/zwA6dOnaJ69epUr14dcLwJLFasGEWLFuX999+//by+vr589NFHBAYGUr58ec6ePQvA9OnTKVq0KIGBgVStWvWe39Pj0qo+IiIikqR9/vsudp+6GqfPWThLKj6rV+SB18yZM4c6deqQP39+/Pz82LRpE6VLlwZgw4YN7N69mxw5clCnTh1mzZpF06ZNuXHjBkFBQQwcOJA+ffrw+eefM2TIEMAxVSU4OJiwsDDy5cvHkiVLyJ8/P23atOHnn3+me/fu1K9fn48//phbt27RqlUrihYtytGjR+/KtXPnTrZs2UJYWBh58+alf//+bNmyhR49ejB+/Hi6d+9O48aNefXVVwH4+OOPGTVqFN26daN+/fq8+OKL/5k6FBYWRrt27e6ZCSB9+vRs3ryZoUOHMmDAAEaOHHnX46tUqcKqVavIkSMHbm5urFmzBoBVq1YxbNiw29d5eHjQp08fgoODb/++9O7dm71797Js2TKuXbtGgQIF+N///nfXMpehoaEAfPLJJyxfvpw8efIwZMgQMmbM+J//btu3b2fdunXcuHGDkiVLUrduXQC2bNnCrl27yJIlC5UqVWLNmjUEBQXd9/v+/vvvWbZsGenTp+fUqVO8//77bNq0ibRp01K7dm1mz55Nw4YNuXHjBuXLl+fLL7/kvffeY8SIEXz88cf06dOHhQsXEhAQcDv/09KIv4iIiEg8mDJlCs2bNwegefPmd033KVu2LLlz58bV1ZUWLVqwevVqwDES3axZMwBatWp1+zhw+/i+ffvIlSsX+fPnB6Bt27asXLkScIyQL1q0iODgYN5777175qpevTopU6bE39+f1KlTU69ePQCKFSt2+03Czp07qVKlCsWKFWPSpEns2rXrgd/rgzIBNG7cGIDSpUv/540IOIr/ypUrWbNmDXXr1uX69evcvHmTI0eOUKBAgQe+Njh+YuDp6Un69OnJkCHD7VHzf0RFRRESEkLFihXZvHkzFSpU4N13373nczVo0ABvb2/Sp09P9erV2bBhA+D4b5Y1a1Zc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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "X = np.linspace(range_min, range_max, 200)\n", "\n", "# Change the plot size\n", "default_figsize = mpl.rcParamsDefault['figure.figsize']\n", "mpl.rcParams['figure.figsize'] = [2 * value for value in default_figsize]\n", "\n", "plot_solution(m, N, X, res.x, lambda_random)\n", "\n", "plt.plot(X, u(X), 'r', label='Analytical solution')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 20, "id": "f819bb4b", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "Text(0, 0.5, 'Loss function value')" }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot([v[0] for v in loss_evolution])\n", "plt.yscale(\"log\")\n", "plt.xlabel(\"Number of epochs\")\n", "plt.ylabel(\"Loss function value\")" ] }, { "cell_type": "markdown", "id": "e53fa645", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## References\n", "\n", "\\[1\\] : O. Kyriienko, A. E. Paine, and V. E. Elfving, “Solving nonlinear differential equations with differentiable quantum circuits”, *Physical Review A* **103**, 052416 (2021). https://journals.aps.org/pra/abstract/10.1103/PhysRevA.103.052416\n", "\n", "\\[2\\] A. Pérez-Salinas, A. Cervera-Lierta, E. Gil-Fuster, and J. I. Latorre, “Data re-uploading for a universal quantum classifier”, *Quantum* **4**, 226 (2020). https://quantum-journal.org/papers/q-2020-02-06-226/\n", "\n", "\\[3\\] M. Schuld, R. Sweke, and J. J. Meyer, “Effect of data encoding on the expressive power of variational quantum-machine-learning models”, *Physical Review A* **103**, 032430 (2021). https://journals.aps.org/pra/abstract/10.1103/PhysRevA.103.032430\n", "\n", "\\[4\\] B. Y. Gan, D. Leykam, D. G. Angelakis, and D. G. Angelakis, “Fock State-enhanced Expressivity of Quantum Machine Learning Models”, in *Conference on Lasers andElectro-Optics* (2021), paper JW1A.73. Optica Publishing Group, (2021). https://opg.optica.org/abstract.cfm?uri=CLEO_AT-2021-JW1A.73.\n", "\n", "\\[5\\] R. Fletcher, Practical methods of optimization. John Wiley & Sons. (2013) https://onlinelibrary.wiley.com/doi/book/10.1002/9781118723203" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }